// 基于 axios 封装的请求模块
import axios from 'axios'
import store from '@/store'
import router from '../router/index'
// 新建一个新的axios实例
const ajax = axios.create({
  baseURL: 'http://toutiao.itheima.net' // 基地址
})

// 添加请求拦截器
ajax.interceptors.request.use(config => {
  const { token } = store.state.user
  // 在发送请求之前做些什么, 如果vuex里有token携带在请求头中
  if (token) {
    // 发起请求之前, 把token携带在请求头上(表明自己身份)
    config.headers.Authorization = `Bearer ${token}`
  }
  // 给服务器
  return config
}, error => {
  // 对请求错误做些什么
  return Promise.reject(error)
})

// 响应拦截器
ajax.interceptors.response.use(
  resp => {
    // 成功回调  http状态码以2.3 开头
    // 得到的数据就是数组 如果想少写一个data就可以直接写成resp.data
    return resp
  }, error => {
    // 失败回调 http 装填吗 4.5 开头
    // 401是token过期
    console.dir(error)

    if (error.response.status === 401) {
      // 1·token续签
      // 2·重新登录
    // 调用store

      store.commit('user/setToken', null)
      console.log(1)
      store.commit('user/setRefreshToken', '')
      router.replace('/login')
    }
    // 在catch中接收  这样就不会执行try中的代码了
    return Promise.reject(error)
  }
)

// 导出自定义函数
export default ajax
